/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import model.bean.BeanArchivo;
import model.bean.BeanCurso;
import model.bean.BeanEstado;
import model.bean.BeanTipoArchivo;
import model.bean.BeanUsuario;
import model.daobase.DBase;

/**
 *
 * @author francotel
 */
public class DaoArchivo extends DBase {

    //listar
    public ArrayList<BeanArchivo> ArchivoUserlist(int idusuario) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        ArrayList<BeanArchivo> lista_archivos_user = new ArrayList<BeanArchivo>();


        try {

            String query = "SELECT a.idarchivo,a.semestre,a.nota,a.megusta,a.num_descargas,cu.tag,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado,ta.nombre_tipo,u.alias "
                    + "FROM archivo a "
                    + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                    + "INNER JOIN estado e ON e.idestado = a.idestado "
                    + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                    + "INNER JOIN usuario u ON u.idusuario=a.idusuario "
                    + "WHERE ((a.idestado=1 OR a.idestado=0) AND u.idusuario=" + idusuario + ") "
                    + "ORDER BY cu.nombre_curso";

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();


            while (res.next()) {
                BeanArchivo archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));
                archivo.setMegusta(res.getInt(4));
                archivo.setNum_descargas(res.getInt(5));
                BeanCurso curso = new BeanCurso();
                curso.setTag(res.getString(6));
                archivo.setCurso(curso);
                archivo.setRuta(res.getString(7));
                archivo.setDescripcion(res.getString(8));
                archivo.setFecha_subida(res.getDate(9));
                archivo.setTamaño(res.getDouble(10));
                BeanEstado estado = new BeanEstado();
                estado.setNombre_estado(res.getString(11));
                archivo.setEstado(estado);
                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setNombre_tipo(res.getString(12));
                archivo.setTipoarchivo(tipoarchivo);
                BeanUsuario usuario = new BeanUsuario();
                usuario.setAlias(res.getString(13));
                archivo.setUsuario(usuario);

                lista_archivos_user.add(archivo);

            }


            String query2 = "SELECT c.idarchivo, count(c.idcomentario) FROM comentario c "
                    + "INNER JOIN archivo a ON c.idarchivo=a.idarchivo "
                    + "INNER JOIN curso cu ON cu.idcurso=a.idcurso "
                    + " WHERE ((a.idestado=1 OR a.idestado=0) AND u.idusuario=" + idusuario + ") "
                    + "GROUP BY c.idarchivo "
                    + "ORDER BY cu.nombre_curso";
            pstmt = conn.prepareStatement(query2);
            res = pstmt.executeQuery();

            while (res.next()) {
                for (BeanArchivo archive : lista_archivos_user) {
                    if (res.getInt(1) == archive.getIdarchivo()) {
                        archive.setNum_comentarios(res.getInt(2));

                    }
                }
            }
            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return lista_archivos_user;

    }

    public ArrayList<BeanArchivo> Archivolist() {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();


        try {

            String query = "SELECT a.idarchivo,a.semestre,a.nota,a.megusta,a.num_descargas,cu.nombre_curso,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado "
                    + "FROM archivo a "
                    + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                    + "INNER JOIN estado e ON e.idestado = a.idestado "
                    + "ORDER BY cu.nombre_curso";

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();

            BeanArchivo archivo;
            while (res.next()) {
                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));
                archivo.setMegusta(res.getInt(4));
                archivo.setNum_descargas(res.getInt(5));
                BeanCurso curso = new BeanCurso();
                curso.setNombre_curso(res.getString(5));
                archivo.setCurso(curso);
                archivo.setRuta(res.getString(6));
                archivo.setDescripcion(res.getString(7));
                archivo.setFecha_subida(res.getDate(8));
                archivo.setTamaño(res.getDouble(9));
                BeanEstado estado = new BeanEstado();
                estado.setNombre_estado(res.getString(10));
                archivo.setEstado(estado);

                lista_archivos.add(archivo);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return lista_archivos;

    }

    public ArrayList<BeanArchivo> ArchivolistUser(int iduser) {


        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();

        try {

            String query = "SELECT a.idarchivo, a.semestre, a.nota, a.megusta, a.num_descargas, a.idusuario, u.nombre, u.alias,"
                    + "a.idcurso, cu.nombre_curso, cu.tag, a.idestado, e.nombre_estado, a.ruta, a.descripcion, a.fecha_subida, a.tamaño,"
                    + "a.idtipoarchivo, ta.nombre_tipo "
                    + " FROM archivo a"
                    + " LEFT JOIN usuario u ON a.idusuario = u.idusuario"
                    + " LEFT JOIN curso cu ON a.idcurso = cu.idcurso"
                    + " LEFT JOIN estado e ON a.idestado = e.idestado"
                    + " LEFT JOIN tipoarchivo ta ON a.idtipoarchivo = ta.idtipoarchivo"
                    + " WHERE a.idusuario =" + iduser
                    + " GROUP BY a.idarchivo; ";

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();

            BeanArchivo archivo;
            while (res.next()) {

                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt("idarchivo"));
                archivo.setSemestre(res.getString("semestre"));
                archivo.setNota(res.getInt("nota"));
                archivo.setMegusta(res.getInt("megusta"));
                archivo.setNum_descargas(res.getInt("num_descargas"));

                BeanUsuario busuario = new BeanUsuario();
                busuario.setIdusuario(res.getInt("idusuario"));
                busuario.setNombre(res.getString("nombre"));
                busuario.setAlias(res.getString("alias"));
                archivo.setUsuario(busuario);

                BeanCurso curso = new BeanCurso();
                curso.setIdcurso(res.getInt("idcurso"));
                curso.setNombre_curso(res.getString("nombre_curso"));
                curso.setTag(res.getString("tag"));
                archivo.setCurso(curso);


                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt("idestado"));
                estado.setNombre_estado(res.getString("nombre_estado"));
                archivo.setEstado(estado);

                archivo.setRuta(res.getString("ruta"));
                archivo.setDescripcion(res.getString("descripcion"));
                archivo.setFecha_subida(res.getDate("fecha_subida"));
                archivo.setTamaño(res.getDouble("tamaño"));

                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setIdtipoarchivo(res.getInt("idtipoarchivo"));
                tipoarchivo.setNombre_tipo(res.getString("nombre_tipo"));
                archivo.setTipoarchivo(tipoarchivo);
                
                archivo.setNum_comentarios(res.getInt("num_comentarios"));


                lista_archivos.add(archivo);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return lista_archivos;

    }

    public ArrayList<BeanArchivo> Archivolistnoreportados() {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();


        try {

            String query = "SELECT a.idarchivo,a.semestre,a.nota,a.megusta,a.num_descargas,cu.tag,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado,ta.nombre_tipo,u.alias "
                    + "FROM archivo a "
                    + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                    + "INNER JOIN estado e ON e.idestado = a.idestado "
                    + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                    + "INNER JOIN usuario u ON u.idusuario=a.idusuario "
                    + "where a.idestado=1 "
                    + "ORDER BY cu.nombre_curso";

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();


            while (res.next()) {
                BeanArchivo archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));
                archivo.setMegusta(res.getInt(4));
                archivo.setNum_descargas(res.getInt(5));
                BeanCurso curso = new BeanCurso();
                curso.setTag(res.getString(6));
                archivo.setCurso(curso);
                archivo.setRuta(res.getString(7));
                archivo.setDescripcion(res.getString(8));
                archivo.setFecha_subida(res.getDate(9));
                archivo.setTamaño(res.getDouble(10));
                BeanEstado estado = new BeanEstado();
                estado.setNombre_estado(res.getString(11));
                archivo.setEstado(estado);
                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setNombre_tipo(res.getString(12));
                archivo.setTipoarchivo(tipoarchivo);
                BeanUsuario usuario = new BeanUsuario();
                usuario.setAlias(res.getString(13));
                archivo.setUsuario(usuario);

                lista_archivos.add(archivo);

            }


            String query2 = "SELECT c.idarchivo, count(c.idcomentario) FROM comentario c "
                    + "INNER JOIN archivo a ON c.idarchivo=a.idarchivo "
                    + "INNER JOIN curso cu ON cu.idcurso=a.idcurso "
                    + "where a.idestado=1 "
                    + "GROUP BY c.idarchivo "
                    + "ORDER BY cu.nombre_curso";
            pstmt = conn.prepareStatement(query2);
            res = pstmt.executeQuery();

            while (res.next()) {
                for (BeanArchivo archive : lista_archivos) {
                    if (res.getInt(1) == archive.getIdarchivo()) {
                        archive.setNum_comentarios(res.getInt(2));

                    }
                }
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return lista_archivos;

    }

    public ArrayList<BeanArchivo> Archivolistreportados() {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();


        try {
            String query = "SELECT a.idarchivo,a.semestre,a.nota,a.megusta,a.num_descargas,cu.tag,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado,ta.nombre_tipo,u.alias "
                    + "FROM archivo a "
                    + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                    + "INNER JOIN estado e ON e.idestado = a.idestado "
                    + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                    + "INNER JOIN usuario u ON u.idusuario=a.idusuario "
                    + "where a.idestado=0 "
                    + "ORDER BY cu.nombre_curso";

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();

            BeanArchivo archivo;
            while (res.next()) {
                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));
                archivo.setMegusta(res.getInt(4));
                archivo.setNum_descargas(res.getInt(5));
                BeanCurso curso = new BeanCurso();
                curso.setTag(res.getString(6));
                archivo.setCurso(curso);
                archivo.setRuta(res.getString(7));
                archivo.setDescripcion(res.getString(8));
                archivo.setFecha_subida(res.getDate(9));
                archivo.setTamaño(res.getDouble(10));
                BeanEstado estado = new BeanEstado();
                estado.setNombre_estado(res.getString(11));
                archivo.setEstado(estado);
                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setNombre_tipo(res.getString(12));
                archivo.setTipoarchivo(tipoarchivo);
                BeanUsuario usuario = new BeanUsuario();
                usuario.setAlias(res.getString(13));
                archivo.setUsuario(usuario);

                lista_archivos.add(archivo);
            }


            String query2 = "SELECT c.idarchivo, count(c.idcomentario) FROM comentario c "
                    + "INNER JOIN archivo a ON c.idarchivo=a.idarchivo "
                    + "INNER JOIN curso cu ON cu.idcurso=a.idcurso "
                    + "where a.idestado=0 "
                    + "GROUP BY c.idarchivo "
                    + "ORDER BY cu.nombre_curso";
            pstmt = conn.prepareStatement(query2);
            res = pstmt.executeQuery();

            while (res.next()) {
                for (BeanArchivo archive : lista_archivos) {
                    if (res.getInt(1) == archive.getIdarchivo()) {
                        archive.setNum_comentarios(res.getInt(2));
                        break;
                    }
                }
            }

            res.close();
            pstmt.close();
            conn.close();


        } catch (SQLException e1) {
            e1.getMessage();
        }

        return lista_archivos;

    }

    //borrar
    public void borrar(int idarchivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "UPDATE archivo SET idestado=-1 "
                    + "where idarchivo=" + idarchivo;

            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
    //insertar

    public void insert(BeanArchivo archivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "INSERT into archivo(semestre,nota,idusuario,idcurso,ruta,descripcion,fecha_subida,tamaño,idestado,idtipoarchivo) "
                    + "values('" + archivo.getSemestre() + "','" + archivo.getNota() + "','" + archivo.getUsuario().getIdusuario()
                    + "','" + archivo.getCurso().getIdcurso() + "','" + archivo.getRuta()
                    + "','" + archivo.getDescripcion() + "',now(),'" + archivo.getTamaño() + "','" + archivo.getEstado().getIdestado() + "'," + archivo.getTipoarchivo().getIdtipoarchivo() + ")";
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }

    public void numPDF(int idarchivo){
       this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "UPDATE archivo SET `num_descargas` = `num_descargas` + 1"
                    + " where idarchivo=" + idarchivo;

            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }
    
    }
    
    
    public void insertPDF(BeanArchivo archivo) {
        this.init_mysql();
        PreparedStatement pstmt = null;

        try {


            String query1 = " INSERT INTO archivo (semestre,nota,megusta,num_descargas,idusuario,idcurso,ruta,descripcion,fecha_subida,tamaño,idestado,idtipoarchivo) VALUES( ? , ? , 0 , 0 , ? , ? , ? , ? ,now(),? ,1, ?)";

            pstmt = conn.prepareStatement(query1);

            pstmt.setString(1, archivo.getSemestre());
            pstmt.setInt(2, archivo.getNota());
            pstmt.setInt(3, archivo.getUsuario().getIdusuario());
            pstmt.setInt(4, archivo.getCurso().getIdcurso());
            pstmt.setString(5, archivo.getRuta());

            pstmt.setString(6, archivo.getDescripcion());
            pstmt.setDouble(7, archivo.getTamaño());
            pstmt.setInt(8, archivo.getTipoarchivo().getIdtipoarchivo());


            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }


    }

    // retorna ruta en md5 
    public String retornarutamd5(int iduser, double tamaño) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        String rutamd5 = "";
        try {
            String query = "select ruta from archivo where idusuario = ? and tamaño = ? ";
            pstmt = conn.prepareStatement(query);
            pstmt.setInt(1, iduser);
            pstmt.setDouble(2, tamaño);
            res = pstmt.executeQuery();

            while (res.next()) {
                rutamd5 = res.getString(1);
            }

            res.close();
            pstmt.close();
            conn.close();
        } catch (SQLException e1) {
            e1.getMessage();
        }
        return rutamd5;
    }

    //bloquear
    public void reportar(int idarchivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "UPDATE archivo SET idestado=0 "
                    + " where idarchivo=" + idarchivo;

            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }

  public void desreportar(int idarchivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;

        PreparedStatement pstmt2 = null;


        try {

            String query = "UPDATE archivo SET idestado=1"
                    + "where idarchivo=" + idarchivo;

            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

            String query2 = "DELETE FROM reporte where idarchivo=" + idarchivo;
            pstmt2 = conn.prepareStatement(query2);
            pstmt2.executeUpdate();
            pstmt2.close();
            conn.close();


        } catch (SQLException e1) {
            e1.getMessage();
        }

    }

//        public BeanArchivo get(int id) {
//
//        this.init_mysql();
//        PreparedStatement pstmt = null;
//        ResultSet res = null;
//        BeanArchivo archivo = new BeanArchivo();
//
//        try {
//
//            String query = "SELECT a.idarchivo,a.semestre, a.nota,c.nombre_curso,a.ruta,a.descripcion,a.idestado, ta.nombre_tipo FROM archivo a"
//                    + "inner join curso cu "
//                    + "on a.idcurso=cu.idcurso "
//                    + "inner join tipoarchivo ta "
//                    + "on ta.idtipoarchivo=a.idtipoarchivo "
//                    + "WHERE idarchivo=" + id;
//
//            pstmt = conn.prepareStatement(query);
//            res = pstmt.executeQuery();
//
//            while (res.next()) {
//                archivo.setIdarchivo(res.getInt(1));
//                archivo.setSemestre(res.getString(2));
//                archivo.setNota(res.getInt(3));
//                
//                BeanCurso curso= new BeanCurso();
//                curso.setNombre_curso(res.getString(4));
//                archivo.setCurso(curso);
//                
//                archivo.setRuta(res.getString(5));
//                archivo.setDescripcion(res.getString(6));
//                
//                BeanEstado estado = new BeanEstado();
//                estado.setIdestado(res.getInt(7));
//                archivo.setEstado(estado);
//                
//                
//             
//            }
//
//            res.close();
//            pstmt.close();
//            conn.close();
//
//        } catch (SQLException e1) {
//            e1.getMessage();
//        }
//
//        return archivo;
//
//    }
    public BeanArchivo get(int id) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        BeanArchivo archivo = new BeanArchivo();

        try {

            String query = "SELECT a.idarchivo, a.semestre, a.nota, a.megusta, a.num_descargas, a.idusuario, u.nombre, u.alias,"
                    + "a.idcurso, cu.nombre_curso, cu.tag, a.idestado, e.nombre_estado, a.ruta, a.descripcion, a.fecha_subida, a.tamaño,"
                    + "a.idtipoarchivo, ta.nombre_tipo"
                    + " FROM archivo a"
                    + " LEFT JOIN usuario u ON a.idusuario = u.idusuario"
                    + " LEFT JOIN curso cu ON a.idcurso = cu.idcurso"
                    + " LEFT JOIN estado e ON a.idestado = e.idestado"
                    + " LEFT JOIN tipoarchivo ta ON a.idtipoarchivo = ta.idtipoarchivo"
                    + " WHERE a.idarchivo =" + id;

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();

            while (res.next()) {
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));

                archivo.setMegusta(res.getInt(4));
                archivo.setNum_descargas(res.getInt(5));

                BeanUsuario busuario = new BeanUsuario();
                busuario.setIdusuario(res.getInt(6));
                busuario.setNombre(res.getString(7));
                busuario.setAlias(res.getString(8));
                archivo.setUsuario(busuario);


                BeanCurso curso = new BeanCurso();
                curso.setIdcurso(res.getInt(9));
                curso.setNombre_curso(res.getString(10));
                curso.setTag(res.getString(11));
                archivo.setCurso(curso);

                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt(12));
                estado.setNombre_estado(res.getString(13));
                archivo.setEstado(estado);

                archivo.setRuta(res.getString(14));
                archivo.setDescripcion(res.getString(15));
                archivo.setFecha_subida(res.getDate(16));
                archivo.setTamaño(res.getDouble(17));

                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setIdtipoarchivo(res.getInt(18));
                tipoarchivo.setNombre_tipo(res.getString(19));
                archivo.setTipoarchivo(tipoarchivo);

            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return archivo;

    }

    public BeanArchivo get2(int id) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        BeanArchivo archivo = new BeanArchivo();

        try {

            String query = "SELECT a.idarchivo,a.semestre, a.nota,a.ruta,a.descripcion,a.idestado, ta.nombre_tipo, a.megusta,a.num_descargas, cu.tag,a.fecha_subida,a.tamaño,u.alias "
                    + "FROM archivo a "
                    + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                    + "INNER JOIN estado e ON e.idestado = a.idestado "
                    + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                    + "INNER JOIN usuario u ON u.idusuario=a.idusuario "
                    + "WHERE a.idarchivo=" + id;

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();

            while (res.next()) {
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));

                BeanCurso curso = new BeanCurso();

                curso.setTag(res.getString(10));
                archivo.setCurso(curso);

                archivo.setRuta(res.getString(4));
                archivo.setDescripcion(res.getString(5));

                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt(6));
                archivo.setEstado(estado);
                BeanTipoArchivo tipoa = new BeanTipoArchivo();
                tipoa.setNombre_tipo(res.getString(7));
                archivo.setMegusta(res.getInt(8));
                archivo.setNum_descargas(res.getInt(9));
                archivo.setFecha_subida(res.getDate(11));
                archivo.setTamaño(res.getDouble(12));

                BeanUsuario user = new BeanUsuario();
                user.setAlias(res.getString(13));

                archivo.setUsuario(user);
            }
            String query2 = "SELECT c.idarchivo, count(c.idcomentario), a.idarchivo FROM comentario c "
                    + "INNER JOIN archivo a ON c.idarchivo=a.idarchivo "
                    + "INNER JOIN curso cu ON cu.idcurso=a.idcurso "
                    + " WHERE ((a.idestado=1 OR a.idestado=0) AND a.idarchivo=" + id + ") "
                    + "GROUP BY c.idarchivo "
                    + "ORDER BY cu.nombre_curso";
            pstmt = conn.prepareStatement(query2);
            res = pstmt.executeQuery();

            while (res.next()) {
                archivo.setNum_comentarios(res.getInt(2));
            }
            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return archivo;

    }

    public void update(BeanArchivo archivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "UPDATE archivo SET semestre='" + archivo.getSemestre() + "', nota=" + archivo.getNota() + ", idcurso=" + archivo.getCurso().getIdcurso()
                    + ", ruta='" + archivo.getRuta() + "', descripcion='" + archivo.getDescripcion()
                    + "', idestado=" + archivo.getEstado().getIdestado()
                    + ", idtipoarchivo=" + archivo.getTipoarchivo().getIdtipoarchivo()
                    + " WHERE idarchivo=" + archivo.getIdarchivo();
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }

    public int numerodearchivos(int iduser) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        int numarchivos = 0;
        try {
            String query = "select count(idarchivo) from archivo where idusuario = ? ";
            pstmt = conn.prepareStatement(query);
            pstmt.setInt(1, iduser);
            res = pstmt.executeQuery();

            while (res.next()) {
                numarchivos = res.getInt(1);
            }

            res.close();
            pstmt.close();
            conn.close();
        } catch (SQLException e1) {
            e1.getMessage();
        }
        return numarchivos;
    }

    public void like(int idarchivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "UPDATE archivo SET `megusta` = `megusta` + 1"
                    + " where idarchivo=" + idarchivo;

            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }

   
public int nummegustaSesion(int idarchivo, int iduser, String idsesion) {

        int num = 0;
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "SELECT num_megusta FROM megusta"
                    + " WHERE idusuario= " + iduser
                    + " AND idarchivo=" + idarchivo
                    + " AND idsesion= " + idsesion;
            
            
            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            while (res.next()) {
                num = res.getInt("num_megusta");
            }
            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return num;
    }

   public int megustaSesion(int idarchivo, int iduser, int num_megusta, String idsesion) {

        int num = 0;
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "INSERT INTO megusta(idusuario, idarchivo, num_megusta, idsesion)"
                    + " VALUES (?,?,?,?)";

            pstmt = conn.prepareStatement(query);

            pstmt.setInt(1, iduser);
            pstmt.setInt(2, idarchivo);
            pstmt.setInt(3, num_megusta);
            pstmt.setString(4, idsesion);


            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return num;
    }

    public ArrayList<BeanArchivo> search_by_user(String buscar, int iduser) {
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();

        try {

            String query = "SELECT a.idarchivo, a.semestre, a.nota, a.megusta, a.num_descargas, a.idusuario, u.nombre, u.alias,"
                    + "a.idcurso, cu.nombre_curso, cu.tag, a.idestado, e.nombre_estado, a.ruta, a.descripcion, a.fecha_subida, a.tamaño,"
                    + "a.idtipoarchivo, ta.nombre_tipo, count(idcomentario) as num_comentarios "
                    + "FROM archivo a "
                    + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                    + "INNER JOIN estado e ON e.idestado = a.idestado "
                    + "INNER JOIN usuario u ON u.idusuario = a.idusuario "
                    + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo = a.idtipoarchivo "
                    + " INNER JOIN comentario c ON a.idarchivo = c.idarchivo "
                    + "WHERE (a.semestre like '%" + buscar + "%' or a.nota like '%" + buscar
                    + "%' or cu.nombre_curso like '%" + buscar + "%' or a.descripcion like '%" + buscar
                    + "%' or cu.tag like '%" + buscar + "%') "
                    + "and a.idusuario =" + iduser
                    + " GROUP BY a.idarchivo "
                    + " ORDER BY cu.nombre_curso;";


            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();

            BeanArchivo archivo;
            while (res.next()) {

                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt("idarchivo"));
                archivo.setSemestre(res.getString("semestre"));
                archivo.setNota(res.getInt("nota"));
                archivo.setMegusta(res.getInt("megusta"));
                archivo.setNum_descargas(res.getInt("num_descargas"));

                BeanUsuario busuario = new BeanUsuario();
                busuario.setIdusuario(res.getInt("idusuario"));
                busuario.setNombre(res.getString("nombre"));
                busuario.setAlias(res.getString("alias"));
                archivo.setUsuario(busuario);

                BeanCurso curso = new BeanCurso();
                curso.setIdcurso(res.getInt("idcurso"));
                curso.setNombre_curso(res.getString("nombre_curso"));
                curso.setTag(res.getString("tag"));
                archivo.setCurso(curso);


                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt("idestado"));
                estado.setNombre_estado(res.getString("nombre_estado"));
                archivo.setEstado(estado);

                archivo.setRuta(res.getString("ruta"));
                archivo.setDescripcion(res.getString("descripcion"));
                archivo.setFecha_subida(res.getDate("fecha_subida"));
                archivo.setTamaño(res.getDouble("tamaño"));

                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setIdtipoarchivo(res.getInt("idtipoarchivo"));
                tipoarchivo.setNombre_tipo(res.getString("nombre_tipo"));
                archivo.setTipoarchivo(tipoarchivo);

                archivo.setNum_comentarios(res.getInt("num_comentarios"));
                lista_archivos.add(archivo);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return lista_archivos;


    }

    public ArrayList<BeanArchivo> search(String buscar) {
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();

        try {

            String query = "SELECT a.idarchivo, a.semestre, a.nota, a.megusta, a.num_descargas, a.idusuario, u.nombre, u.alias,"
                    + " a.idcurso, cu.nombre_curso, cu.tag, a.idestado, e.nombre_estado, a.ruta, a.descripcion, a.fecha_subida, a.tamaño,"
                    + " a.idtipoarchivo, ta.nombre_tipo, count(idcomentario) as num_comentarios "
                    + " FROM archivo a "
                    + " LEFT JOIN curso cu ON cu.idcurso = a.idcurso "
                    + " LEFT JOIN estado e ON e.idestado = a.idestado "
                    + " LEFT JOIN usuario u ON u.idusuario = a.idusuario "
                    + " LEFT JOIN tipoarchivo ta ON ta.idtipoarchivo = a.idtipoarchivo "
                    + " LEFT JOIN comentario c ON a.idarchivo = c.idarchivo "
                    + " WHERE (a.semestre like '%" + buscar + "%' or a.nota like '%" + buscar
                    + " %' or cu.nombre_curso like '%" + buscar + "%' or a.descripcion like '%" + buscar
                    + " %' or cu.tag like '%" + buscar + "%') "
                    + " GROUP BY a.idarchivo "
                    + " ORDER BY cu.nombre_curso;";


            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();

            BeanArchivo archivo;
            while (res.next()) {

                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt("idarchivo"));
                archivo.setSemestre(res.getString("semestre"));
                archivo.setNota(res.getInt("nota"));
                archivo.setMegusta(res.getInt("megusta"));
                archivo.setNum_descargas(res.getInt("num_descargas"));

                BeanUsuario busuario = new BeanUsuario();
                busuario.setIdusuario(res.getInt("idusuario"));
                busuario.setNombre(res.getString("nombre"));
                busuario.setAlias(res.getString("alias"));
                archivo.setUsuario(busuario);

                BeanCurso curso = new BeanCurso();
                curso.setIdcurso(res.getInt("idcurso"));
                curso.setNombre_curso(res.getString("nombre_curso"));
                curso.setTag(res.getString("tag"));
                archivo.setCurso(curso);


                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt("idestado"));
                estado.setNombre_estado(res.getString("nombre_estado"));
                archivo.setEstado(estado);

                archivo.setRuta(res.getString("ruta"));
                archivo.setDescripcion(res.getString("descripcion"));
                archivo.setFecha_subida(res.getDate("fecha_subida"));
                archivo.setTamaño(res.getDouble("tamaño"));

                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setIdtipoarchivo(res.getInt("idtipoarchivo"));
                tipoarchivo.setNombre_tipo(res.getString("nombre_tipo"));
                archivo.setTipoarchivo(tipoarchivo);

                archivo.setNum_comentarios(res.getInt("num_comentarios"));
                lista_archivos.add(archivo);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return lista_archivos;


    }

    public ArrayList<BeanArchivo> mostVote() {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();
        ArrayList<BeanArchivo> lista_archivosmv = new ArrayList<BeanArchivo>();

        try {

            String query = "SELECT a.idarchivo, a.semestre, a.nota, a.megusta, a.num_descargas, a.idusuario, u.nombre, u.alias,"
                    + "a.idcurso, cu.nombre_curso, cu.tag, a.idestado, e.nombre_estado, a.ruta, a.descripcion, a.fecha_subida, a.tamaño,"
                    + "a.idtipoarchivo, ta.nombre_tipo, count(idcomentario) as num_comentarios"
                    + " FROM archivo a"
                    + " LEFT JOIN usuario u ON a.idusuario = u.idusuario"
                    + " LEFT JOIN curso cu ON a.idcurso = cu.idcurso"
                    + " LEFT JOIN estado e ON a.idestado = e.idestado"
                    + " LEFT JOIN tipoarchivo ta ON a.idtipoarchivo = ta.idtipoarchivo"
                    + " LEFT JOIN comentario c ON a.idarchivo = c.idarchivo"
                    + " GROUP BY a.idarchivo"
                    + " ORDER BY a.megusta DESC; ";

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();

            BeanArchivo archivo;
            while (res.next()) {

                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt("idarchivo"));
                archivo.setSemestre(res.getString("semestre"));
                archivo.setNota(res.getInt("nota"));
                archivo.setMegusta(res.getInt("megusta"));
                archivo.setNum_descargas(res.getInt("num_descargas"));

                BeanUsuario busuario = new BeanUsuario();
                busuario.setIdusuario(res.getInt("idusuario"));
                busuario.setNombre(res.getString("nombre"));
                busuario.setAlias(res.getString("alias"));
                archivo.setUsuario(busuario);

                BeanCurso curso = new BeanCurso();
                curso.setIdcurso(res.getInt("idcurso"));
                curso.setNombre_curso(res.getString("nombre_curso"));
                curso.setTag(res.getString("tag"));
                archivo.setCurso(curso);


                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt("idestado"));
                estado.setNombre_estado(res.getString("nombre_estado"));
                archivo.setEstado(estado);

                archivo.setRuta(res.getString("ruta"));
                archivo.setDescripcion(res.getString("descripcion"));
                archivo.setFecha_subida(res.getDate("fecha_subida"));
                archivo.setTamaño(res.getDouble("tamaño"));

                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setIdtipoarchivo(res.getInt("idtipoarchivo"));
                tipoarchivo.setNombre_tipo(res.getString("nombre_tipo"));
                archivo.setTipoarchivo(tipoarchivo);

                archivo.setNum_comentarios(res.getInt("num_comentarios"));

                lista_archivos.add(archivo);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        for (int i = 0; i < 3; i++) {
            lista_archivosmv.add(lista_archivos.get(i));

        }

        return lista_archivosmv;

    }

    public ArrayList<BeanArchivo> mostDown() {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();
        ArrayList<BeanArchivo> lista_archivosmv = new ArrayList<BeanArchivo>();

        try {

            String query = "SELECT a.idarchivo, a.semestre, a.nota, a.megusta, a.num_descargas, a.idusuario, u.nombre, u.alias,"
                    + "a.idcurso, cu.nombre_curso, cu.tag, a.idestado, e.nombre_estado, a.ruta, a.descripcion, a.fecha_subida, a.tamaño,"
                    + "a.idtipoarchivo, ta.nombre_tipo, count(idcomentario) as num_comentarios"
                    + " FROM archivo a"
                    + " LEFT JOIN usuario u ON a.idusuario = u.idusuario"
                    + " LEFT JOIN curso cu ON a.idcurso = cu.idcurso"
                    + " LEFT JOIN estado e ON a.idestado = e.idestado"
                    + " LEFT JOIN tipoarchivo ta ON a.idtipoarchivo = ta.idtipoarchivo"
                    + " LEFT JOIN comentario c ON a.idarchivo = c.idarchivo"
                    + " GROUP BY a.idarchivo"
                    + " ORDER BY a.num_descargas DESC; ";

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();

            BeanArchivo archivo;
            while (res.next()) {

                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt("idarchivo"));
                archivo.setSemestre(res.getString("semestre"));
                archivo.setNota(res.getInt("nota"));
                archivo.setMegusta(res.getInt("megusta"));
                archivo.setNum_descargas(res.getInt("num_descargas"));

                BeanUsuario busuario = new BeanUsuario();
                busuario.setIdusuario(res.getInt("idusuario"));
                busuario.setNombre(res.getString("nombre"));
                busuario.setAlias(res.getString("alias"));
                archivo.setUsuario(busuario);

                BeanCurso curso = new BeanCurso();
                curso.setIdcurso(res.getInt("idcurso"));
                curso.setNombre_curso(res.getString("nombre_curso"));
                curso.setTag(res.getString("tag"));
                archivo.setCurso(curso);


                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt("idestado"));
                estado.setNombre_estado(res.getString("nombre_estado"));
                archivo.setEstado(estado);

                archivo.setRuta(res.getString("ruta"));
                archivo.setDescripcion(res.getString("descripcion"));
                archivo.setFecha_subida(res.getDate("fecha_subida"));
                archivo.setTamaño(res.getDouble("tamaño"));

                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setIdtipoarchivo(res.getInt("idtipoarchivo"));
                tipoarchivo.setNombre_tipo(res.getString("nombre_tipo"));
                archivo.setTipoarchivo(tipoarchivo);

                archivo.setNum_comentarios(res.getInt("num_comentarios"));

                lista_archivos.add(archivo);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        for (int i = 0; i < 3; i++) {
            lista_archivosmv.add(lista_archivos.get(i));

        }

        return lista_archivosmv;

    }

    public ArrayList<BeanArchivo> advsearch(String ciclo, String ncurso, int nota, String tipoevaluacion) {
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();

        try {

            String query = "SELECT a.idarchivo, a.semestre, a.nota, a.megusta, a.num_descargas, a.idusuario, u.nombre, u.alias,"
                    + " a.idcurso, cu.nombre_curso, cu.tag, a.idestado, e.nombre_estado, a.ruta, a.descripcion, a.fecha_subida, a.tamaño,"
                    + " a.idtipoarchivo, ta.nombre_tipo, count(idcomentario) as num_comentarios "
                    + " FROM archivo a "
                    + " LEFT JOIN curso cu ON cu.idcurso = a.idcurso "
                    + " LEFT JOIN estado e ON e.idestado = a.idestado "
                    + " LEFT JOIN usuario u ON u.idusuario = a.idusuario "
                    + " LEFT JOIN tipoarchivo ta ON ta.idtipoarchivo = a.idtipoarchivo "
                    + " LEFT JOIN comentario c ON a.idarchivo = c.idarchivo "
                    + " WHERE (a.semestre like '" + ciclo + "' or a.nota like '" + nota + "' "
                    + " or cu.tag like '" + ncurso + "' or ta.nombre_tipo like '" + tipoevaluacion + "' ) "
                    + " GROUP BY a.idarchivo "
                    + " ORDER BY cu.nombre_curso;";


            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();

            BeanArchivo archivo;
            while (res.next()) {

                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt("idarchivo"));
                archivo.setSemestre(res.getString("semestre"));
                archivo.setNota(res.getInt("nota"));
                archivo.setMegusta(res.getInt("megusta"));
                archivo.setNum_descargas(res.getInt("num_descargas"));

                BeanUsuario busuario = new BeanUsuario();
                busuario.setIdusuario(res.getInt("idusuario"));
                busuario.setNombre(res.getString("nombre"));
                busuario.setAlias(res.getString("alias"));
                archivo.setUsuario(busuario);


                BeanCurso curso = new BeanCurso();
                curso.setIdcurso(res.getInt("idcurso"));
                curso.setNombre_curso(res.getString("nombre_curso"));
                curso.setTag(res.getString("tag"));
                archivo.setCurso(curso);


                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt("idestado"));
                estado.setNombre_estado(res.getString("nombre_estado"));
                archivo.setEstado(estado);

                archivo.setRuta(res.getString("ruta"));
                archivo.setDescripcion(res.getString("descripcion"));
                archivo.setFecha_subida(res.getDate("fecha_subida"));
                archivo.setTamaño(res.getDouble("tamaño"));

                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setIdtipoarchivo(res.getInt("idtipoarchivo"));
                tipoarchivo.setNombre_tipo(res.getString("nombre_tipo"));
                archivo.setTipoarchivo(tipoarchivo);

                archivo.setNum_comentarios(res.getInt("num_comentarios"));
                lista_archivos.add(archivo);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return lista_archivos;


    }

    public BeanArchivo getparaveradmin(int id) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        BeanArchivo archivo = new BeanArchivo();

        try {

            String query = "SELECT a.idarchivo, a.semestre, a.nota, a.megusta, a.num_descargas, a.idusuario, u.nombre, u.alias,"
                    + "a.idcurso, cu.nombre_curso, cu.tag, a.idestado, e.nombre_estado, a.ruta, a.descripcion, a.fecha_subida, a.tamaño,"
                    + "a.idtipoarchivo, ta.nombre_tipo"
                    + " FROM archivo a"
                    + " LEFT JOIN usuario u ON a.idusuario = u.idusuario"
                    + " LEFT JOIN curso cu ON a.idcurso = cu.idcurso"
                    + " LEFT JOIN estado e ON a.idestado = e.idestado"
                    + " LEFT JOIN tipoarchivo ta ON a.idtipoarchivo = ta.idtipoarchivo"
                    + " WHERE a.idarchivo =" + id;

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();

            while (res.next()) {
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));

                archivo.setMegusta(res.getInt(4));
                archivo.setNum_descargas(res.getInt(5));

                BeanUsuario busuario = new BeanUsuario();
                busuario.setIdusuario(res.getInt(6));
                busuario.setNombre(res.getString(7));
                busuario.setAlias(res.getString(8));
                archivo.setUsuario(busuario);


                BeanCurso curso = new BeanCurso();
                curso.setIdcurso(res.getInt(9));
                curso.setNombre_curso(res.getString(10));
                curso.setTag(res.getString(11));
                archivo.setCurso(curso);

                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt(12));
                estado.setNombre_estado(res.getString(13));
                archivo.setEstado(estado);

                archivo.setRuta(res.getString(14));
                archivo.setDescripcion(res.getString(15));
                archivo.setFecha_subida(res.getDate(16));
                archivo.setTamaño(res.getDouble(17));

                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setIdtipoarchivo(res.getInt(18));
                tipoarchivo.setNombre_tipo(res.getString(19));
                archivo.setTipoarchivo(tipoarchivo);

            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return archivo;

    }
    
     public ArrayList<BeanArchivo> getByStringNoRep(String cadena, String fecha_registro1, String fecha_registro2) {
        ArrayList<BeanArchivo> archivoList = new ArrayList<BeanArchivo>();
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        BeanArchivo archivo = null;


        try {
            if (cadena != "" && fecha_registro1 != "" && fecha_registro2 != "") {
                String temporal = "%" + cadena + "%";
                String[] fecha_1 = fecha_registro1.split("/");
                String[] fecha_2 = fecha_registro2.split("/");
                String fecha_reg1 = fecha_1[2] + "," + fecha_1[0] + "," + fecha_1[1];
                String fecha_reg2 = fecha_2[2] + "," + fecha_2[0] + "," + fecha_2[1];





                String query = "SELECT a.idarchivo,a.semestre,a.nota,a.megusta,a.num_descargas,cu.tag,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado,ta.nombre_tipo,u.alias "
                        + "FROM archivo a "
                        + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                        + "INNER JOIN estado e ON e.idestado = a.idestado "
                        + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                        + "INNER JOIN usuario u ON u.idusuario=a.idusuario "
                        + "where a.idestado=1 AND"
                        + " (a.semestre LIKE ? OR cu.tag LIKE ? OR u.alias LIKE ? OR (DATE(a.fecha_subida)>=str_to_date(?,'%Y,%m,%d') AND DATE(a.fecha_subida)<=str_to_date(?,'%Y,%m,%d'))) "
                        + "ORDER BY cu.nombre_curso ";

                pstmt = conn.prepareStatement(query);
                pstmt.setString(1, temporal);
                pstmt.setString(2, temporal);
                pstmt.setString(3, temporal);
                pstmt.setString(4, fecha_reg1);
                pstmt.setString(5, fecha_reg2);
            } else if (cadena == "" && fecha_registro1 != "" && fecha_registro2 != "") {
                String[] fecha_1 = fecha_registro1.split("/");
                String[] fecha_2 = fecha_registro2.split("/");
                String fecha_reg1 = fecha_1[2] + "," + fecha_1[0] + "," + fecha_1[1];
                String fecha_reg2 = fecha_2[2] + "," + fecha_2[0] + "," + fecha_2[1];

                String query = "SELECT a.idarchivo,a.semestre,a.nota,a.megusta,a.num_descargas,cu.tag,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado,ta.nombre_tipo,u.alias "
                        + "FROM archivo a "
                        + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                        + "INNER JOIN estado e ON e.idestado = a.idestado "
                        + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                        + "INNER JOIN usuario u ON u.idusuario=a.idusuario "
                        + "where a.idestado=1 AND"
                        + " (DATE(a.fecha_subida)>=str_to_date(?,'%Y,%m,%d') AND DATE(a.fecha_subida)<=str_to_date(?,'%Y,%m,%d'))";
                pstmt = conn.prepareStatement(query);
                pstmt.setString(1, fecha_reg1);
                pstmt.setString(2, fecha_reg2);

            } else if (cadena != "" && fecha_registro1 == "" && fecha_registro2 == "") {
                String temporal = "%" + cadena + "%";
                String query = "SELECT a.idarchivo,a.semestre,a.nota,a.megusta,a.num_descargas,cu.tag,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado,ta.nombre_tipo,u.alias "
                        + "FROM archivo a "
                        + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                        + "INNER JOIN estado e ON e.idestado = a.idestado "
                        + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                        + "INNER JOIN usuario u ON u.idusuario=a.idusuario "
                        + "where a.idestado=1 AND"
                        + " (a.semestre LIKE ? OR cu.tag LIKE ? OR u.alias LIKE ?)";
                pstmt = conn.prepareStatement(query);
                pstmt.setString(1, temporal);
                pstmt.setString(2, temporal);
                pstmt.setString(3, temporal);
            }


            res = pstmt.executeQuery();
            while (res.next()) {
                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));
                archivo.setMegusta(res.getInt(4));
                archivo.setNum_descargas(res.getInt(5));
                BeanCurso curso = new BeanCurso();
                curso.setTag(res.getString(6));
                archivo.setCurso(curso);
                archivo.setRuta(res.getString(7));
                archivo.setDescripcion(res.getString(8));
                archivo.setFecha_subida(res.getDate(9));
                archivo.setTamaño(res.getDouble(10));
                BeanEstado estado = new BeanEstado();
                estado.setNombre_estado(res.getString(11));
                archivo.setEstado(estado);
                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setNombre_tipo(res.getString(12));
                archivo.setTipoarchivo(tipoarchivo);
                BeanUsuario usuario = new BeanUsuario();
                usuario.setAlias(res.getString(13));
                archivo.setUsuario(usuario);

                archivoList.add(archivo);
            }



            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }


        return archivoList;

    }
        public void updateditado(BeanArchivo archivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {
           
            String query = "UPDATE archivo SET semestre=?, idcurso=?,nota=?, descripcion=?, idtipoarchivo=? WHERE idarchivo="+archivo.getIdarchivo();
            pstmt = conn.prepareStatement(query);
            pstmt.setString(1, archivo.getSemestre());
            pstmt.setInt(2, archivo.getCurso().getIdcurso());
            pstmt.setInt(3, archivo.getNota());
            pstmt.setString(4, archivo.getDescripcion());
            pstmt.setInt(5, archivo.getTipoarchivo().getIdtipoarchivo());
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
     
      public ArrayList<BeanArchivo> getByStringRep(String cadena, String fecha_registro1, String fecha_registro2) {
        ArrayList<BeanArchivo> archivoRepList = new ArrayList<BeanArchivo>();
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        BeanArchivo archivo = null;


        try {
            if (cadena != "" && fecha_registro1 != "" && fecha_registro2 != "") {
                String temporal = "%" + cadena + "%";
                String[] fecha_1 = fecha_registro1.split("/");
                String[] fecha_2 = fecha_registro2.split("/");
                String fecha_reg1 = fecha_1[2] + "," + fecha_1[0] + "," + fecha_1[1];
                String fecha_reg2 = fecha_2[2] + "," + fecha_2[0] + "," + fecha_2[1];





                String query = "SELECT a.idarchivo,a.semestre,a.nota,a.megusta,a.num_descargas,cu.tag,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado,ta.nombre_tipo,u.alias "
                        + "FROM archivo a "
                        + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                        + "INNER JOIN estado e ON e.idestado = a.idestado "
                        + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                        + "INNER JOIN usuario u ON u.idusuario=a.idusuario "
                        + "where a.idestado=0 AND"
                        + " (a.semestre LIKE ? OR cu.tag LIKE ? OR u.alias LIKE ? OR (DATE(fecha_registro)>=str_to_date(?,'%Y,%m,%d') AND DATE(fecha_registro)<=str_to_date(?,'%Y,%m,%d'))) "
                        + "ORDER BY cu.nombre_curso ";

                pstmt = conn.prepareStatement(query);
                pstmt.setString(1, temporal);
                pstmt.setString(2, temporal);
                pstmt.setString(3, temporal);
                pstmt.setString(4, fecha_reg1);
                pstmt.setString(5, fecha_reg2);
            } else if (cadena == "" && fecha_registro1 != "" && fecha_registro2 != "") {
                String[] fecha_1 = fecha_registro1.split("/");
                String[] fecha_2 = fecha_registro2.split("/");
                String fecha_reg1 = fecha_1[2] + "," + fecha_1[0] + "," + fecha_1[1];
                String fecha_reg2 = fecha_2[2] + "," + fecha_2[0] + "," + fecha_2[1];

                String query = "SELECT a.idarchivo,a.semestre,a.nota,a.megusta,a.num_descargas,cu.tag,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado,ta.nombre_tipo,u.alias "
                        + "FROM archivo a "
                        + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                        + "INNER JOIN estado e ON e.idestado = a.idestado "
                        + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                        + "INNER JOIN usuario u ON u.idusuario=a.idusuario "
                        + "where a.idestado=0 AND"
                        + " (DATE(fecha_registro)>=str_to_date(?,'%Y,%m,%d') AND DATE(fecha_registro)<=str_to_date(?,'%Y,%m,%d'))";
                pstmt = conn.prepareStatement(query);
                pstmt.setString(1, fecha_reg1);
                pstmt.setString(2, fecha_reg2);

            } else if (cadena != "" && fecha_registro1 == "" && fecha_registro2 == "") {
                String temporal = "%" + cadena + "%";
                String query = "SELECT a.idarchivo,a.semestre,a.nota,a.megusta,a.num_descargas,cu.tag,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado,ta.nombre_tipo,u.alias "
                        + "FROM archivo a "
                        + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                        + "INNER JOIN estado e ON e.idestado = a.idestado "
                        + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                        + "INNER JOIN usuario u ON u.idusuario=a.idusuario "
                        + "where a.idestado=0 AND"
                        + " (a.semestre LIKE ? OR cu.tag LIKE ? OR u.alias LIKE ?)";
                pstmt = conn.prepareStatement(query);
                pstmt.setString(1, temporal);
                pstmt.setString(2, temporal);
                pstmt.setString(3, temporal);
            }


            res = pstmt.executeQuery();
            while (res.next()) {
                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));
                archivo.setMegusta(res.getInt(4));
                archivo.setNum_descargas(res.getInt(5));
                BeanCurso curso = new BeanCurso();
                curso.setTag(res.getString(6));
                archivo.setCurso(curso);
                archivo.setRuta(res.getString(7));
                archivo.setDescripcion(res.getString(8));
                archivo.setFecha_subida(res.getDate(9));
                archivo.setTamaño(res.getDouble(10));
                BeanEstado estado = new BeanEstado();
                estado.setNombre_estado(res.getString(11));
                archivo.setEstado(estado);
                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setNombre_tipo(res.getString(12));
                archivo.setTipoarchivo(tipoarchivo);
                BeanUsuario usuario = new BeanUsuario();
                usuario.setAlias(res.getString(13));
                archivo.setUsuario(usuario);

                archivoRepList.add(archivo);
            }



            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }


        return archivoRepList;

    }
      
       public ArrayList<BeanArchivo> getByStringUserList(String cadena, String fecha_registro1, String fecha_registro2,int idusuario) {
        ArrayList<BeanArchivo> archivoList = new ArrayList<BeanArchivo>();
        this.init_mysql();
        
        
        PreparedStatement pstmt = null;
        ResultSet res = null;
        BeanArchivo archivo = null;


        try {
            if (cadena != "" && fecha_registro1 != "" && fecha_registro2 != "") {
                String temporal = "%" + cadena + "%";
                String[] fecha_1 = fecha_registro1.split("/");
                String[] fecha_2 = fecha_registro2.split("/");
                String fecha_reg1 = fecha_1[2] + "," + fecha_1[0] + "," + fecha_1[1];
                String fecha_reg2 = fecha_2[2] + "," + fecha_2[0] + "," + fecha_2[1];





                String query = "SELECT a.idarchivo,a.semestre,a.nota,a.megusta,a.num_descargas,cu.tag,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado,ta.nombre_tipo,u.alias "
                        + "FROM archivo a "
                        + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                        + "INNER JOIN estado e ON e.idestado = a.idestado "
                        + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                        + "INNER JOIN usuario u ON u.idusuario=a.idusuario "
                        + "WHERE ((a.idestado=1 OR a.idestado=0) AND u.idusuario=" + idusuario + ") AND "
                        + " (a.semestre LIKE ? OR cu.tag LIKE ? OR u.alias LIKE ? OR (DATE(a.fecha_subida)>=str_to_date(?,'%Y,%m,%d') AND DATE(a.fecha_subida)<=str_to_date(?,'%Y,%m,%d'))) "
                        + "ORDER BY cu.nombre_curso ";

                pstmt = conn.prepareStatement(query);
                pstmt.setString(1, temporal);
                pstmt.setString(2, temporal);
                pstmt.setString(3, temporal);
                pstmt.setString(4, fecha_reg1);
                pstmt.setString(5, fecha_reg2);
            } else if (cadena == "" && fecha_registro1 != "" && fecha_registro2 != "") {
                String[] fecha_1 = fecha_registro1.split("/");
                String[] fecha_2 = fecha_registro2.split("/");
                String fecha_reg1 = fecha_1[2] + "," + fecha_1[0] + "," + fecha_1[1];
                String fecha_reg2 = fecha_2[2] + "," + fecha_2[0] + "," + fecha_2[1];

                String query = "SELECT a.idarchivo,a.semestre,a.nota,a.megusta,a.num_descargas,cu.tag,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado,ta.nombre_tipo,u.alias "
                        + "FROM archivo a "
                        + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                        + "INNER JOIN estado e ON e.idestado = a.idestado "
                        + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                        + "INNER JOIN usuario u ON u.idusuario=a.idusuario "
                        + "WHERE ((a.idestado=1 OR a.idestado=0) AND u.idusuario=" + idusuario + ") AND "
                        + " (DATE(a.fecha_subida)>=str_to_date(?,'%Y,%m,%d') AND DATE(a.fecha_subida)<=str_to_date(?,'%Y,%m,%d'))";
                pstmt = conn.prepareStatement(query);
                pstmt.setString(1, fecha_reg1);
                pstmt.setString(2, fecha_reg2);

            } else if (cadena != "" && fecha_registro1 == "" && fecha_registro2 == "") {
                String temporal = "%" + cadena + "%";
                String query = "SELECT a.idarchivo,a.semestre,a.nota,a.megusta,a.num_descargas,cu.tag,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado,ta.nombre_tipo,u.alias "
                        + "FROM archivo a "
                        + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                        + "INNER JOIN estado e ON e.idestado = a.idestado "
                        + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                        + "INNER JOIN usuario u ON u.idusuario=a.idusuario "
                        + "WHERE ((a.idestado=1 OR a.idestado=0) AND u.idusuario=" + idusuario + ") AND "
                        + " (a.semestre LIKE ? OR cu.tag LIKE ? OR u.alias LIKE ?)";
                pstmt = conn.prepareStatement(query);
                pstmt.setString(1, temporal);
                pstmt.setString(2, temporal);
                pstmt.setString(3, temporal);
            }


            res = pstmt.executeQuery();
            while (res.next()) {
                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));
                archivo.setMegusta(res.getInt(4));
                archivo.setNum_descargas(res.getInt(5));
                BeanCurso curso = new BeanCurso();
                curso.setTag(res.getString(6));
                archivo.setCurso(curso);
                archivo.setRuta(res.getString(7));
                archivo.setDescripcion(res.getString(8));
                archivo.setFecha_subida(res.getDate(9));
                archivo.setTamaño(res.getDouble(10));
                BeanEstado estado = new BeanEstado();
                estado.setNombre_estado(res.getString(11));
                archivo.setEstado(estado);
                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setNombre_tipo(res.getString(12));
                archivo.setTipoarchivo(tipoarchivo);
                BeanUsuario usuario = new BeanUsuario();
                usuario.setAlias(res.getString(13));
                archivo.setUsuario(usuario);

                archivoList.add(archivo);
            }



            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }


        return archivoList;

    }
      
}
